package com.spzx.product.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.spzx.product.domain.ProductSpec;
import com.spzx.product.mapper.ProductSpecMapper;
import com.spzx.product.service.ICategoryService;
import com.spzx.product.service.IProductSpecService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Arrays;
import java.util.List;

/**
 * 商品规格 Service 实现类
 *
 * @author Taeyang
 * @since 2025-04-17
 */
@Service
public class ProductSpecServiceImpl extends ServiceImpl<ProductSpecMapper, ProductSpec> implements IProductSpecService {

    @Autowired
    private ProductSpecMapper productSpecMapper;

    @Autowired
    private ICategoryService categoryService;

    /**
     * 查询商品规格列表
     *
     * @param productSpec 商品规格
     * @return 商品规格集合
     */
    @Override
    public List<ProductSpec> selectProductSpecList(ProductSpec productSpec) {

        // 第一种方法
        // List<ProductSpec> list = list(new LambdaQueryWrapper<ProductSpec>()
        //         .eq(StringUtils.isNotNull(productSpec.getCategoryId()), ProductSpec::getCategoryId, productSpec.getCategoryId())
        //         .eq(StringUtils.isNotNull(productSpec.getSpecName()), ProductSpec::getSpecName, productSpec.getSpecName()));
        // list.forEach(spec -> {
        //     spec.setCategoryName(categoryService.getById(spec.getCategoryId()).getName());
        // });
        // return list;

        // 第二种方法
        return productSpecMapper.selectProductSpecList(productSpec);
    }

    /**
     * 获取商品规格详细信息
     *
     * @param id 商品规格主键
     * @return 商品规格详细信息
     */
    @Override
    public ProductSpec selectProductSpecById(Long id) {
        ProductSpec productSpec = getById(id);
        productSpec.setCategoryIdList(categoryService.getAllCategoryIdList(productSpec.getCategoryId()));
        return productSpec;
    }

    /**
     * 新增商品规格
     *
     * @param productSpec 商品规格
     * @return 结果
     */
    @Override
    public int insertProductSpec(ProductSpec productSpec) {
        return save(productSpec) ? 1 : 0;
    }

    /**
     * 修改商品规格
     *
     * @param productSpec 商品规格
     * @return 结果
     */
    @Override
    public int updateProductSpec(ProductSpec productSpec) {
        return updateById(productSpec) ? 1 : 0;
    }

    /**
     * 删除商品规格
     *
     * @param ids 商品规格主键集合
     * @return 结果
     */
    @Override
    public int deleteProductSpecByIds(Long... ids) {
        return productSpecMapper.deleteBatchIds(Arrays.asList(ids));
    }

    /**
     * 根据分类id获取商品规格列表
     *
     * @param categoryId 分类id
     * @return 结果
     */
    @Override
    public List<ProductSpec> selectProductPescListByCategoryId(Long categoryId) {
        return list(new LambdaQueryWrapper<ProductSpec>().eq(ProductSpec::getCategoryId, categoryId));
    }
}
